<?php
/**
 * BasicPHP-FF
 * 基础类（无需实例化，直接静态调用）
 * @author wangji <j@wj45.net>
 */
 
class Base
{
    private function __construct() {}

	//结束程序并输出错误信息
	public static function error($msg = '', $format = FALSE) {
		if ( !headers_sent() ) {
			header('Content-type: text/html; charset=utf-8');
		}
        if (!defined('DEBUG') || !DEBUG) {
            //直接显示404页，不显示错误信息
            if ( file_exists(APP_ROOT . 'pages/404.html') ) {
                ob_clean();
                include(APP_ROOT . 'pages/404.html');
                exit();
            } else {
                $msg = '<body style="text-align:center;"><h1>HTTP 404</h1><br/>BasicPHP-FF</body>';
                die($msg);
            }
        } else {
            //DEBUG下可以显示错误信息
            if ($format) {
    			echo '<pre>';
    			var_dump($msg);
    			echo '</pre>';
    			exit();
    		} else {
    			die($msg);
    		}
        }
	}
    
    //取当前URI
    public static function getUri() {
        if ( isset($_SERVER['PHP_SELF']) ) {
        	$uri = $_SERVER['PHP_SELF'];
        } else {
        	$uri = $_SERVER['REQUEST_URI'];
        	$uri = explode('?', $uri);
        	$uri = $uri[0];
        }
        return $uri;
    }
    
    //取当前路由
    public static function getRoute() {
		
		if(!isset($_GET['r']) || empty($_GET['r']))
			return array('c'=>DEFAULT_C, 'a'=>DEFAULT_A);
		else{
			if(strstr($_GET['r'],'\\')!=false)
				$r=explode('\\', $_GET['r']);
			else			
				$r=explode('/', $_GET['r']);
			return array('c'=>$r[0], 'a'=>$r[1]);
		}
    }
	
	//取特定的URL参数
	public static function getRequest($name) {
		if(empty($name)) return false;
		if(!isset($_REQUEST[$name]) || (empty($_REQUEST[$name]) && $_REQUEST[$name]!=0 )) return false;
		return $_REQUEST[$name];
	}
    
    //取当前.php文件名（如要rewrite需在此自行mod）
    public static function getPhpName() {
        $script = $_SERVER['SCRIPT_NAME'];
        $script = pathinfo($script);
        if ( isset($script['basename']) ) {
            $rt = $script['basename'];
        } else {
            $rt = false;
        }
        return $rt;
    }
    
    /* ------ 路由解析并执行程序 ------ */
    public static function run($appDir = '') {
        //开始路由解析
        //解析动作（程序入口文件必须是根目录下的.php文件）
        $action = self::getRoute();
       	$control = $action['c'];
        $action = $action['a'];
        
        //加载对应的Action类，执行相应的动作
        $path = APP_ROOT . '/protect/action/';
        //不同应用的不同目录
        if ( !empty($appDir) ) {
            $path .= $appDir . '/';
        }
        $path .= $control . '.action.php';
        
        if ( is_file($path) ) {
        	require_once($path);  //载入类文件
        } else {
        	self::error('您所请求的控制器文件不存在：' . $control . '.action.php'." $path");
        }
		$control_class=$control.'Action';
        if ( class_exists($control_class) ) {
        	$object = new $control_class();  //生成对象
        } else {
            self::error('缺少控制器类：' . $control_class);
        }	
        if ( method_exists($object, $action) ) {
        	$object->$action();  //执行动作
        } else {
            self::error('您所请求的方法不存在' . $action);
        }
    }
}

/* ------ EOF ------ */
